package com.hsurosy.hsuchain.nft.lock.config;

import com.hsurosy.hsuchain.nft.lock.DistributeLockAspect;
import org.redisson.api.RedissonClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 分布式锁配置类
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 4:40
 * @Description
 * @Version: v1.0.0
 */
@Configuration
public class DistributeLockConfiguration {

    /**
     * 定义一个分布式锁的 AOP 切面 Bean
     * <p>
     * 如果 Spring 容器中没有其他的 DistributeLockAspect 实现时，创建默认的切面 Bean。
     * 使用 Redisson 实现分布式锁功能。
     * </p>
     *
     * @param redisson Redisson 客户端，用于管理和操作分布式锁
     * @return 分布式锁切面实例
     */
    @Bean
    @ConditionalOnMissingBean
    public DistributeLockAspect distributeLockAspect(RedissonClient redisson) {
        // 创建并返回分布式锁的 AOP 切面实例
        return new DistributeLockAspect(redisson);
    }
}
